import { View, Text, StyleSheet, KeyboardAvoidingView, ScrollView, TouchableOpacity, ActivityIndicator, } from "react-native"; import { useEffect, useState } from "react"; import { router, useLocalSearchParams } from "expo-router"; import { Card } from "@/components/ui/Cards"; import { Input } from "@/components/ui/Input"; import { Button } from "@/components/ui/Button"; import { Section, SectionHeader } from "@/components/ui/Sections"; import { Spacing, Typography, Colors, BorderRadius } from "@/constants/theme"; import { TimePicker } from "@/components/ui/TimePicker"; import { useMedicineRegimen, useUpdateMedicineRegimen } from "@/hooks"; import { MedicinePeriodicity } from "@/lib/api"; const PERIODICITY_OPTIONS: { label: string; value: MedicinePeriodicity }[] = [ { label: "Uma vez", value: "ONCE" }, { label: "Diário", value: "DAILY" }, { label: "2x ao dia", value: "TWICE_DAILY" }, { label: "3x ao dia", value: "THREE_TIMES_DAILY" }, { label: "Semanal", value: "WEEKLY" }, { label: "Quinzenal", value: "BIWEEKLY" }, { label: "Mensal", value: "MONTHLY" }, ]; function getTimePickerCount(p: MedicinePeriodicity): number { switch (p) { case "ONCE": return 0; case "DAILY": return 1; case "TWICE_DAILY": return 2; case "THREE_TIMES_DAILY": return 3; default: return 1; } } function timesToDates(times: string[]): Date[] { return times.map((t) => { const [h, m] = t.split(":").map(Number); const d = new Date(); d.setHours(h, m, 0, 0); return d; }); } export default function MedicineRegimenEdit() { const { id } = useLocalSearchParams<{ id: string }>(); const { data, isLoading } = useMedicineRegimen(id); const updateRegimen = useUpdateMedicineRegimen(); const [name, setName] = useState(""); const [dosage, setDosage] = useState(""); const [periodicity, setPeriodicity] = useState("DAILY"); const [scheduledTimes, setScheduledTimes] = useState([]); const [initialized, setInitialized] = useState(false); useEffect(() => { if (data?.regimen && !initialized) { const r = data.regimen; setName(r.name); setDosage(r.dosage); setPeriodicity(r.periodicity as MedicinePeriodicity); setScheduledTimes(timesToDates(r.scheduledAt)); setInitialized(true); } }, [data, initialized]); const handleSave = async () => { const count = getTimePickerCount(periodicity); const scheduledAt = scheduledTimes.slice(0, count).map( (d) => `${d.getHours().toString().padStart(2, "0")}:${d.getMinutes().toString().padStart(2, "0")}` ); await updateRegimen.mutateAsync({ id, payload: { name, dosage, periodicity, scheduledAt }, }); router.back(); }; if (isLoading || !initialized) { return ( ); } return ( Editar medicamento Atualize os detalhes do medicamento
{PERIODICITY_OPTIONS.map((opt) => ( { setPeriodicity(opt.value); const count = getTimePickerCount(opt.value); setScheduledTimes((prev) => count === 0 ? [] : count > prev.length ? [...prev, ...Array(count - prev.length).fill(new Date())] : prev.slice(0, count) ); }} activeOpacity={0.7} > {opt.label} ))}
{scheduledTimes.length > 0 && (
{scheduledTimes.map((t, i) => ( setScheduledTimes((prev) => prev.map((v, idx) => (idx === i ? date : v)) ) } /> ))}
)}